HTTP Cookie |
您所在的位置:网站首页 › cookie not matched怎么解决 › HTTP Cookie |
Domain 和 Path 标识定义了 Cookie 的作用域:即允许 Cookie 应该发送给哪些 URL。 Domain 属性Domain 指定了哪些主机可以接受 Cookie。如果不指定,该属性默认为同一 host 设置 cookie,不包含子域名。如果指定了 Domain,则一般包含子域名。因此,指定 Domain 比省略它的限制要少。但是,当子域需要共享有关用户的信息时,这可能会有所帮助。 例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如 developer.mozilla.org)。 Path 属性Path 属性指定了一个 URL 路径,该 URL 路径必须存在于请求的 URL 中,以便发送 Cookie 标头。以字符 %x2F (“/”) 作为路径分隔符,并且子路径也会被匹配。 例如,设置 Path=/docs,则以下地址都会匹配: /docs /docs/ /docs/Web/ /docs/Web/HTTP但是这些请求路径不会匹配以下地址: / /docsets /fr/docs SameSite 属性SameSite 属性允许服务器指定是否/何时通过跨站点请求发送(其中站点由注册的域和方案定义:http 或 https)。这提供了一些针对跨站点请求伪造攻击(CSRF)的保护。它采用三个可能的值:Strict、Lax 和 None。 使用 Strict,cookie 仅发送到它来源的站点。Lax 与 Strict 相似,只是在用户导航到 cookie 的源站点时发送 cookie。例如,通过跟踪来自外部站点的链接。None 指定浏览器会在同站请求和跨站请求下继续发送 cookie,但仅在安全的上下文中(即,如果 SameSite=None,且还必须设置 Secure 属性)。如果没有设置 SameSite 属性,则将 cookie 视为 Lax。 下面是例子: http Set-Cookie: mykey=myvalue; SameSite=Strict备注: 与 SameSite 相关的标准最近发生了变化(MDN 记录了上面的新行为)。有关在特定浏览器版本中如何处理属性的信息,请参阅 cookie 浏览器兼容性表: 如果 SameSite 未指定,则 SameSite=Lax 时新的默认值。以前,默认情况下会为有请求发送 cookie。 SameSite=None 的 cookie 还必须指定 Secure 属性(它们需要安全上下文)。 cookie 使用不同的方案(http: 或 https:)发送来自同一域的 cookie,则不再视为来自同一站点。 Cookie 前缀cookie 的机制使得服务器无法确认 cookie 是在安全来源上设置的,甚至无法确定 cookie 最初是在哪里设置的。 子域上的易受攻击的应用程序可以使用 Domain 属性设置 cookie,从而可以访问所有其他子域上的该 cookie。会话劫持攻击中可能会滥用此机制。有关主要缓解方法,请参阅会话劫持(session fixation) (en-US)。 但是,作为深度防御措施,可以使用 cookie 前缀来断言有关 cookie 的特定事实。有两个前缀可用: __Host-如果 cookie 名称具有此前缀,则仅当它也用 Secure 属性标记、从安全来源发送、不包括 Domain 属性,并将 Path 属性设置为 / 时,它才在 Set-Cookie 标头中接受。这样,这些 cookie 可以被视为“domain-locked”。 __Secure-如果 cookie 名称具有此前缀,则仅当它也用 Secure 属性标记,是从安全来源发送的,它才在 Set-Cookie 标头中接受。该前缀限制要弱于 __Host- 前缀。 带有这些前缀的 Cookie,如果不符合其限制的会被浏览器拒绝。请注意,这确保了如果子域要创建带有前缀的 cookie,那么它将要么局限于该子域,要么被完全忽略。由于应用服务器仅在确定用户是否已通过身份验证或 CSRF 令牌正确时才检查特定的 cookie 名称,因此,这有效地充当了针对会话劫持的防御措施。 备注: 在应用程序服务器上,Web 应用程序必须检查完整的 cookie 名称。用户代理程序在将其发送到请求的 Cookie 标头之前,不会从 cookie 中剥离前缀。 有关 cookie 前缀和浏览器支持的当前状态的更多信息,请参阅Set-Cookie 参考文章的前缀部分。 JavaScript 通过 Document.cookie 访问 Cookie通过 Document.cookie 属性可创建新的 Cookie。如果未设置 HttpOnly 标记,你也可以从 JavaScript 访问现有的 Cookie。 js document.cookie = "yummy_cookie=choco"; document.cookie = "tasty_cookie=strawberry"; console.log(document.cookie); // logs "yummy_cookie=choco; tasty_cookie=strawberry"通过 JavaScript 创建的 Cookie 不能包含 HttpOnly 标志。 请留意在安全章节提到的安全隐患问题,JavaScript 可以通过跨站脚本攻击(XSS)的方式来窃取 Cookie。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |